<?php
////////////////////////////////////////////////////
// Autore eugenio Ghiglia <eugenio@blux.org>
//
////////////////////////////////////////////////////

class Db {

    public  $username;     // Utente utilizzato per la connessione
    public  $password;     // password utilizzata per la connessione
    public  $database;     // database sul quale connettersi
    public  $host;         // ip del database server
    public  $view_error;   // visualizza errori del DB
    public  $connessione;  // connessione al DB
    public  $result;       // risultati di una query
    public  $nrecord;      // totale record dell'ultima query eseguita
    public  $lastid;       // ultimo id utilizzato
    public  $newconn;      // stabilisce se deve essere aperta una nuova connessione
    private $db_type;      // 0 = MySQL, 1 = MSSql (tipo di database da utilizzare)
    

    function Db() {  /* Costruttore */
       $this->username = "root";
       $this->password = "";
       $this->database = "";
       $this->host = "127.0.0.1";
       $this->view_error=true;
       $this->nrecord=0;
       $this->lastid=0;
       $this->db_type=0;
       $this->newconn=0;
    }


    function type($tipo) {
        
        switch($tipo) {
            
            case "mysql":
            case "MySQL":
            case "0":
                $this->db_type=0;
            break;
            
            case "mssql":
            case "MSSql":
            case "1":
                $this->db_type=1;
            break;
            
            default:
                $this->db_type=0;
            break;
            
        }
        
        return true;
    }

    function connetti($host, $user, $password, $db) { /* apre una connessione al db */
       
       $returned = true;
        
       $this->username = $user;
       $this->password = $password;
       $this->database = $db;
       $this->host = $host;
       
       switch ($this->db_type) {
       
        case 0:
            // ---------------- mysql
            $this->connessione = @mysql_connect($this->host, $this->username, $this->password, $this->newconn);
            
            if (!$this->connessione) {
                    if ($this->view_error) echo "Errore [".@mysql_errno($this->connessione)."]: non riesco a stabilire una connessione al database (user: $this->username, database: $this->database, host: $this->host): ".@mysql_error($this->connessione);
                    $returned = false;
            }
               
            /* selezione del database da usare */
               
            if (!@mysql_select_db($this->database, $this->connessione)) {
                if ($this->view_error) echo "Errore [".@mysql_errno($this->connessione)."]: non riesco a selezionare il database specificato (user: $this->username, database: $this->database, host: $this->host): ".@mysql_error($this->connessione);
                    $returned = false;
            }
            // ---------------- mysql  
        break;
        
        case 1:
            // ---------------- mssql  
            if ($this->view_error)  
                $this->connessione = mssql_connect($this->host, $this->username, $this->password);
            else 
                $this->connessione = @mssql_connect($this->host, $this->username, $this->password);
        
            /* selezione del database da usare */
            if ($this->view_error) 
                $selezionedb=mssql_select_db($this->database, $this->connessione);
            else 
                $selezionedb=@mssql_select_db($this->database, $this->connessione);
                
            if ($this->connessione=="" || !$selezionedb)  {
                $returned = false;
                if ($this->view_error) echo "Errore: non riesco a stabilire una connessione al database (user: $this->username, database: $this->database, host: $this->host)";
            }
            // ---------------- mssql
        break;
        
        default:
            return $returned = false;
        break;
       
       }
       
       return $returned;
    }
    
    function disconnetti() { /* chiude la connesisone al db */
        $returned = true;
        
        switch ($this->db_type) {       
            case 0: // mysql
                if (!@mysql_close($this->connessione) && $this->view_error) {
                    if ($this->view_error) echo "Errore [".@mysql_errno($this->connessione)."]: non riesco chiudere la connessione con il database MySQL (user: $this->username, database: $this->database, host: $this->host): ".@mysql_error($this->connessione);
                    $returned = false;
                }
            break;
            
            case 1: // mssql
                
                if ($this->view_error)
                    $returned = mssql_close($this->connessione);
                else
                    $returned = @mssql_close($this->connessione);
                    
                if ($this->view_error && !$returned) echo "Errore: non riesco chiudere la connessione con il database MSSql (user: $this->username, database: $this->database, host: $this->host)";
                    
            break;
            
            default:
                $returned = false;
            break;
        
        }
        

        return $returned;
    }

    function error_off() { /* disabilita la visualizzazione dei messaggi */
        $this->view_error=false;
    }

    function error_on() { /* abilita la visualizzazione dei messaggi */
        $this->view_error=true;
    }

    function sql($sql) { /* esegue uno statement SQL */
        
        $returned = true;
        
        if ($sql!="") {
            
            $this->lastid=0;
            
            switch ($this->db_type) {       
                
                case 0: // mysql
                    $this->result=@mysql_query($sql, $this->connessione);
                    if (!$this->result) {
                        if ($this->view_error) echo "Errore [".@mysql_errno($this->connessione)."]: errore nell'esecuzione dell'SQL (sql: \"$sql\"): ".@mysql_error($this->connessione);
                        return false;
                    } else {
                      $this->nrecord=@mysql_num_rows($this->result);
                      $this->lastid=@mysql_insert_id($this->connessione);
                      $returned = true;
                    }
                break;
                
                case 1: // mssql
                    if ($this->view_error)
                        $this->result=mssql_query($sql, $this->connessione);
                    else 
                        $this->result=@mssql_query($sql, $this->connessione);
                    $returned = $this->result;
                    if ($this->view_error & !$returned) echo "Errore: errore nell'esecuzione dell'SQL (sql: \"$sql\")";
                break;
                
                default:
                    $returned = false;
                break;
                
            }
            
            
        } else {
            if ($this->view_error) echo "Attenzione: la stringa SQL è vuota!";
            $returned = false;
        }
        
        return $returned;
    }
    
    function sql_arr($sql, &$result, &$nrecord) { /* esegue uno statement SQL e lo restituisce in un array*/
        
        $returned = false;
        $nrecord = 0;
        
        if ($sql!="") {
            
            switch ($this->db_type) {       
                
                case 0: // mysql                
                    
                    $this->result=@mysql_query($sql, $this->connessione);
                    
                    if (!$this->result) {
                        if ($this->view_error) echo "Errore [".@mysql_errno($this->connessione)."]: errore nell'esecuzione dell'SQL (sql: \"$sql\"): ".@mysql_error($this->connessione);
                        $returned = false;
                    } else {
                      $this->nrecord=@mysql_num_rows($this->result);
                      $nrecord=$this->nrecord;
                      
                      $i=0;
                      // memorizzo i dati nell'array
                      while ($row=@mysql_fetch_array($this->result)) {
                        $ncampi = mysql_num_fields($this->result);
                        for ($j=0; $j<$ncampi; $j++) {
                          $campo = mysql_field_name($this->result, $j);
                          $result[$i][$campo]=$row[$campo];
                        }
                        $i++;
                      }
                      
                      $returned = true;
                    }
                
                break;
                
                case 1: // mssql
                    
                    if ($this->view_error)
                        $this->result=mssql_query($sql, $this->connessione);
                    else 
                        $this->result=@mssql_query($sql, $this->connessione);
                    
                    if ($this->result) {
                        
                        if ($this->view_error)
                            $this->nrecord=mssql_num_rows($this->result);
                        else
                            $this->nrecord=@mssql_num_rows($this->result);
                            
                        $nrecord=$this->nrecord;
                        
                      $i=0;
                      // memorizzo i dati nell'array
                      while ($row=@mssql_fetch_array($this->result)) {
                        $ncampi = mssql_num_fields($this->result);
                        for ($j=0; $j<$ncampi; $j++) {
                          $campo = mssql_field_name($this->result, $j);
                          $result[$i][$campo]=$row[$campo];
                        }
                        $i++;
                      }
                      
                      $returned = true;  	
                    }
                
                break;
                
                default:
                    $returned = false;
                break;
                
            }
            
            
        } else {
            if ($this->view_error) echo "Attenzione: la stringa SQL è vuota (user: $this->username, database: $this->database, host: $this->host)";
            $returned = false;
        }
        
        return $returned;
    }



    function change_db($new_db) {
       $returned = false;
       $this->database = $new_db;
       
       /* selezione del database da usare */
     
        switch ($this->db_type) {
        
            case 0: //mysql
                if ($this->view_error) 
                    $selezionedb=mysql_select_db($this->database, $this->connessione);
                else 
                    $selezionedb=@mysql_select_db($this->database, $this->connessione);
                 
                if ($selezionedb) $returned = true;
            break;
            
            case 1: //mssql
               
                if ($this->view_error) 
                    $selezionedb=mssql_select_db($this->database, $this->connessione);
                else 
                    $selezionedb=@mssql_select_db($this->database, $this->connessione);
                 
                if ($selezionedb) $returned = true;
                
            break;
            
            default:
                $returned = false;
            break;
        
        }
     
      
       return $returned;
    } // fine metodo change_db


}

?>